/*
 *  ImageFileTiff.cpp
 *  Ray Tracing
 *
 *  Created by Jean-Marc Comby + Romain Dequesne on Sun May 09 2004.
 *  Copyright (c) 2004. All rights reserved.
 *
 */

#include "ImageFileTiff.hpp"

#include "tiffwrite.hpp"

using namespace std;

/**
 * Construceur permettant d'initialiser une ImageFileTiff à partir
 * d'une Image, un nom de fichier et la qualité voulue.
 *
 * @param im pointeur sur l'Image que l'on veut sauver.
 * @param output nom du fichier dans lequel l'Image sera sauvée.
 */
ImageFileTiff::ImageFileTiff(Image *im, const string& output)
  : ImageFile( im, output )
{}

/**
 * Constructeur permettant d'initialiser une ImageFilePPM de zéro.
 *
 * @param x dimension horizontale de l'image.
 * @param y dimension verticale de l'image.
 * @param output nom du fichier dans lequel l'Image sera sauvée.
 */
ImageFileTiff::ImageFileTiff(const unsigned int& x, const unsigned int& y,
			     const string& output)
  : ImageFile( x, y, output )
{}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
ImageFileTiff::~ImageFileTiff()
{}

/**
 * On rempli un tableau avec les 3 composantes de chaque pixel à la
 * suite. On appelle ensuite la fonction tiffwrite.
 */
void ImageFileTiff::affiche()
{
  cout << "Sauvegarde de l image " << outputfile << endl;
  unsigned long int taille; // nombre de pixel
  taille=Hauteur*Largeur*3;
  ComposantCouleur* tabpixel;
  tabpixel = new ComposantCouleur[taille];
  unsigned long int nbr(0); // numerote les pixels
  Couleur color;
  for (unsigned int pixel_y(0); pixel_y < Hauteur; pixel_y++)
    {
      for (unsigned int pixel_x(0); pixel_x < Largeur; pixel_x++)
	{
	  color=Screen[pixel_x][pixel_y];
	  tabpixel[nbr]=color.rouge();
	  nbr++;
	  tabpixel[nbr]=color.vert();
	  nbr++;
	  tabpixel[nbr]=color.bleu();
	  nbr++;
	}
    };
  tiffwrite(outputfile,tabpixel,Largeur,Hauteur);
  delete [] tabpixel;
}
